Completed
Push — master ( 48e0cc...46633a )
by Maxence
02:57
created

nav.displayAddMemberInput   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 3
rs 10
cc 1
nc 1
nop 0
1
/*
2
 * Circles - Bring cloud-users closer together.
3
 *
4
 * This file is licensed under the Affero General Public License version 3 or
5
 * later. See the COPYING file.
6
 *
7
 * @author Maxence Lange <[email protected]>
8
 * @copyright 2017
9
 * @license GNU AGPL version 3 or any later version
10
 *
11
 * This program is free software: you can redistribute it and/or modify
12
 * it under the terms of the GNU Affero General Public License as
13
 * published by the Free Software Foundation, either version 3 of the
14
 * License, or (at your option) any later version.
15
 *
16
 * This program is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU Affero General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU Affero General Public License
22
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23
 *
24
 */
25
26
/** global: OC */
27
/** global: OCA */
28
/** global: Notyf */
29
30
/** global: actions */
31
/** global: nav */
32
/** global: elements */
33
/** global: settings */
34
/** global: resultCircles */
35
/** global: resultMembers */
36
/** global: resultLinks */
37
/** global: curr */
38
/** global: api */
39
/** global: define */
40
41
var nav = {
42
43
	initNavigation: function () {
44
		this.initElementsAddMemberNavigation();
45
		this.initElementsLinkCircleNavigation();
46
		this.initElementsCircleNavigation();
47
48
		this.displayCirclesList('all');
49
	},
50
51
52
	initElementsAddMemberNavigation: function () {
53
54
		elements.addMember.hide();
55
		elements.addMember.on('input propertychange paste focus', function () {
56
			var search = $(this).val().trim();
57
			if (search === '') {
58
				elements.membersSearchResult.fadeOut(400);
59
				return;
60
			}
61
62
			actions.searchMembersRequest(search);
63
			if (elements.membersSearchResult.children().length === 0) {
64
				elements.membersSearchResult.fadeOut(400);
65
			} else {
66
				elements.membersSearchResult.fadeIn(400);
67
			}
68
		}).blur(function () {
69
			elements.membersSearchResult.fadeOut(400);
70
			nav.circlesActionReturn();
71
		});
72
		elements.addMember.on('keydown', function (e) {
73
			if (e.keyCode === 27) {
74
				nav.circlesActionReturn();
75
			}
76
			if (e.keyCode === 13) {
77
				api.addMember(curr.circle, $(this).val(), resultMembers.addMemberResult);
78
			}
79
80
		});
81
82
	},
83
84
85
	initElementsLinkCircleNavigation: function () {
86
87
		elements.linkCircle.hide();
88
		elements.linkCircle.on('keydown', function (e) {
89
90
			if (e.keyCode === 27) {
91
				nav.circlesActionReturn();
92
			}
93
			if (e.keyCode !== 13) {
94
				return;
95
			}
96
97
			api.linkCircle(curr.circle, elements.linkCircle.val(), resultLinks.linkCircleResult);
98
		}).blur(function () {
99
			nav.circlesActionReturn();
100
		});
101
	},
102
103
104
	initElementsCircleNavigation: function () {
105
106
		elements.joinCircle.hide();
107
		elements.joinCircle.on('click', function () {
108
			api.joinCircle(curr.circle, resultCircles.joinCircleResult);
109
			nav.circlesActionReturn();
110
		});
111
112
		elements.leaveCircle.hide();
113
		elements.leaveCircle.on('click', function () {
114
			api.leaveCircle(curr.circle, resultCircles.leaveCircleResult);
115
			nav.circlesActionReturn();
116
		});
117
118
		elements.destroyCircle.on('click', function () {
119
			OC.dialogs.confirm(
120
				t('circles', 'Are you sure you want to delete this circle?'),
121
				t('circles', 'Please confirm'),
122
				function (e) {
123
					if (e === true) {
124
						api.destroyCircle(curr.circle, resultCircles.destroyCircleResult);
125
					}
126
				});
127
		});
128
129
		elements.joinCircleAccept.on('click', function () {
130
			api.joinCircle(curr.circle, resultCircles.joinCircleResult);
131
		});
132
133
		elements.joinCircleReject.on('click', function () {
134
			api.leaveCircle(curr.circle, resultCircles.leaveCircleResult);
135
		});
136
	},
137
138
139
	displayCirclesList: function (type) {
140
141
		curr.circlesType = type;
142
		curr.searchCircle = '';
143
		curr.searchUser = '';
144
145
		curr.circle = 0;
146
		curr.circleLevel = 0;
147
148
		elements.navigation.show('slide', 800);
149
		elements.emptyContent.show(800);
150
		elements.mainUI.fadeOut(800);
151
152
		elements.circlesSearch.val('');
153
		elements.addMember.val('');
154
		elements.linkCircle.val('');
155
156
		this.resetCirclesTypeSelection(type);
157
		elements.resetCirclesList();
158
		api.listCircles(type, '', 0, resultCircles.listCirclesResult);
159
	},
160
161
162
	resetCirclesTypeSelection: function (type) {
163
		elements.circlesList.children('div').removeClass('selected');
164
		elements.circlesList.children().each(function () {
165
			if ($(this).attr('circle-type') === type.toLowerCase()) {
166
				$(this).addClass('selected');
167
			}
168
		});
169
	},
170
171
	circlesActionReturn: function () {
172
		nav.displayCircleButtons(true);
173
		settings.displaySettings(false);
174
		nav.displayAddMemberInput(false);
175
		nav.displayLinkCircleInput(false);
176
		nav.displayJoinCircleButton(false);
177
		nav.displayInviteCircleButtons(false);
178
	},
179
180
	joinCircleAction: function () {
181
		nav.displayCircleButtons(false);
182
		nav.displayAddMemberInput(false);
183
		nav.displayLinkCircleInput(false);
184
		nav.displayJoinCircleButton(true);
185
	},
186
187
	displayCircleButtons: function (display) {
188
		if (display) {
189
			elements.buttonCircleActionReturn.hide(define.animationMenuSpeed);
190
			elements.buttonCircleActions.delay(define.animationMenuSpeed).show(
191
				define.animationMenuSpeed);
192
		} else {
193
			elements.buttonCircleActions.hide(define.animationMenuSpeed);
194
			elements.buttonCircleActionReturn.delay(define.animationMenuSpeed).show(
195
				define.animationMenuSpeed);
196
		}
197
	},
198
199
	displayAddMemberInput: function (display) {
200
		if (display) {
201
			elements.addMember.val('');
202
			elements.addMember.delay(define.animationMenuSpeed).show(define.animationMenuSpeed,
203
				function () {
204
					$(this).focus();
205
				});
206
		} else {
207
			elements.addMember.hide(define.animationMenuSpeed);
208
		}
209
	},
210
211
	displayLinkCircleInput: function (display) {
212
		if (display) {
213
			elements.linkCircle.val('');
214
			elements.linkCircle.delay(define.animationMenuSpeed).show(define.animationMenuSpeed,
215
				function () {
216
					$(this).focus();
217
				});
218
		} else {
219
			elements.linkCircle.hide(define.animationMenuSpeed);
220
		}
221
	},
222
223
224
	displayInviteCircleButtons: function (display) {
225
		if (display) {
226
			elements.joinCircleAccept.show(define.animationMenuSpeed);
227
			elements.joinCircleReject.delay(define.animationMenuSpeed).show(
228
				define.animationMenuSpeed);
229
		} else {
230
			elements.joinCircleAccept.hide(define.animationMenuSpeed);
231
			elements.joinCircleReject.hide(define.animationMenuSpeed);
232
		}
233
	},
234
235
	displayJoinCircleButton: function (display) {
236
		if (display) {
237
			if (curr.circleStatus === 'Invited') {
238
				elements.joinCircle.hide(define.animationMenuSpeed);
239
				elements.leaveCircle.hide(define.animationMenuSpeed);
240
				nav.displayInviteCircleButtons(true);
241
242
			} else {
243
				nav.displayInviteCircleButtons(false);
244
245
				if (curr.circleLevel === 0 && curr.circleStatus !== 'Requesting') {
246
					elements.joinCircle.delay(define.animationMenuSpeed).show(
247
						define.animationMenuSpeed);
248
					elements.leaveCircle.hide(define.animationMenuSpeed);
249
					elements.joinCircleAccept.hide(define.animationMenuSpeed);
250
					elements.joinCircleReject.hide(define.animationMenuSpeed);
251
252
				}
253
				else {
254
					elements.leaveCircle.delay(define.animationMenuSpeed).show(
255
						define.animationMenuSpeed);
256
					elements.joinCircle.hide(define.animationMenuSpeed);
257
				}
258
			}
259
		} else {
260
			elements.joinCircle.hide(define.animationMenuSpeed);
261
			elements.leaveCircle.hide(define.animationMenuSpeed);
262
		}
263
	},
264
265
266
	/**
267
	 *
268
	 * @param display
269
	 */
270
	displayOptionsNewCircle: function (display) {
271
		if (display) {
272
			elements.newType.fadeIn(300);
273
			elements.newSubmit.fadeIn(500);
274
			elements.newTypeDefinition.fadeIn(700);
275
		}
276
		else {
277
			elements.newType.fadeOut(700);
278
			elements.newSubmit.fadeOut(500);
279
			elements.newTypeDefinition.fadeOut(300);
280
		}
281
	},
282
283
284
	displayMembers: function (members) {
285
286
		elements.remMember.fadeOut(300);
287
		elements.rightPanel.fadeOut(300);
288
289
		elements.mainUIMembersTable.emptyTable();
290
		if (members === null) {
291
			elements.mainUIMembersTable.hide(200);
292
			return;
293
		}
294
295
		elements.mainUIMembersTable.show(200);
296
		for (var i = 0; i < members.length; i++) {
297
			var tmpl = elements.generateTmplMember(members[i]);
298
			elements.mainUIMembersTable.append(tmpl);
299
		}
300
301
		for (i = 0; i < 10; i++) {
302
			if (curr.circleLevel < 9 && curr.circleLevel <= i) {
303
				$('.level-select option[value="' + i + '"]').attr('disabled', 'disabled');
304
			}
305
		}
306
307
308
		elements.mainUIMembersTable.children('tr.entry').each(function () {
309
310
				var userId = $(this).attr('member-id');
311
312
				//
313
				// level
314
				var level = $(this).attr('member-level');
315
				var levelSelect = $(this).find('.level-select');
316
				if (level === '0') {
317
					levelSelect.hide();
318
				}
319
				else {
320
					levelSelect.show(200).val(level);
321
				}
322
				levelSelect.on('change', function () {
323
					actions.changeMemberLevel(userId, $(this).val());
324
				});
325
326
				//
327
				// status
328
				var status = $(this).attr('member-status');
329
				var statusSelect = $(this).find('.status-select');
330
331
				statusSelect.on('change', function () {
332
					actions.changeMemberStatus(userId, $(this).val());
333
				});
334
				statusSelect.append($('<option>', {
335
					value: status,
336
					text: t('circles', status)
337
				})).val(status);
338
339
				if (curr.circleLevel <= $(this).attr('member-level')) {
340
					return;
341
				}
342
343
				if (status === 'Member' || status === 'Invited') {
344
					statusSelect.append($('<option>', {
345
						value: 'remove_member',
346
						text: t('circles', 'Kick this member')
347
					}));
348
				}
349
350
				if (status === 'Requesting') {
351
					statusSelect.append($('<option>', {
352
						value: 'accept_request',
353
						text: t('circles', 'Accept the request')
354
					}));
355
					statusSelect.append($('<option>', {
356
						value: 'dismiss_request',
357
						text: t('circles', 'Dismiss the request')
358
					}));
359
				}
360
361
			}
362
		);
363
	},
364
365
366
	displayLinks: function (links) {
367
368
		elements.mainUILinksTable.emptyTable();
369
		if (links.length === 0) {
370
			elements.mainUILinksTable.hide(curr.animationSpeed);
371
			return;
372
		}
373
374
		elements.mainUILinksTable.show(curr.animationSpeed);
375
		for (var i = 0; i < links.length; i++) {
376
			var tmpl = elements.generateTmplLink(links[i]);
377
			elements.mainUILinksTable.append(tmpl);
378
		}
379
		//
380
		// for (i = 0; i < 10; i++) {
381
		// 	if (curr.circleLevel < 9 && curr.circleLevel <= i) {
382
		// 		$('.level-select option[value="' + i + '"]').attr('disabled', 'disabled');
383
		// 	}
384
		// }
385
386
387
	},
388
389
390
	displayCircleDetails: function (details) {
391
		elements.circlesDetails.children('#name').text(details.name);
392
		elements.circlesDetails.children('#type').text(t('circles', details.typeLongString));
393
394
		elements.buttonCircleActions.show(300);
395
		elements.addMember.hide(300);
396
	},
397
398
399
	displayMembersInteraction: function (details) {
400
		if (details.user.level < define.levelModerator) {
401
			elements.buttonAddMember.hide();
402
		} else {
403
			elements.buttonAddMember.show();
404
		}
405
406
		if (curr.allowed_federated === '0' || details.type === 'Personal' ||
407
			details.user.level < define.levelAdmin) {
408
			elements.buttonLinkCircle.hide();
409
		} else {
410
			elements.buttonLinkCircle.show();
411
		}
412
413
		elements.joinCircleInteraction.hide();
414
		this.displayNonMemberInteraction(details);
415
416
		if (details.user.level === define.levelOwner) {
417
			elements.destroyCircle.show();
418
			elements.buttonCircleSettings.show();
419
			elements.buttonJoinCircle.hide();
420
		}
421
422
	},
423
424
425
	displayNonMemberInteraction: function (details) {
426
		elements.joinCircleAccept.hide();
427
		elements.joinCircleReject.hide();
428
		elements.joinCircleRequest.hide();
429
		elements.joinCircleInvite.hide();
430
		elements.buttonCircleSettings.hide();
431
		elements.destroyCircle.hide();
432
433
		if (details.user.status === 'Requesting') {
434
			elements.joinCircleRequest.show();
435
			return;
436
		}
437
438
		if (details.user.level > 0) {
439
			return;
440
		}
441
442
		setTimeout(function () {
443
			nav.joinCircleAction();
444
		}, 200);
445
	}
446
447
};
448
449